#include<sys/socket.h>
#include<sys/types.h>
#include<string>
#include<iostream>
#include<netinet/in.h>
#include <arpa/inet.h>

int main(int argc,char* argv[])
{
    if(argc<3)
    {
        std::cout<<"Usager: ./client ip port"<<std::endl;
        exit(1);
    }
    std::string serve_ip=argv[1];
    unsigned int serve_port=std::stoi(argv[2]);
    //客户端套接字
    int sockfd=socket(AF_INET,SOCK_DGRAM,0);
    if(sockfd<0)
    {
        std::cout<<"socket fail!"<<std::endl;
        exit(2);
    }
    //客户端套接字不用绑定ip与端口因为服务器会对其随机绑定：
    struct sockaddr_in serve;
    serve.sin_family=AF_INET;
    serve.sin_port=htons(serve_port);
    serve.sin_addr.s_addr=inet_addr(serve_ip.c_str());
    unsigned int len=sizeof(serve);
    while(1)
    {
        std::string input;
        char buffer[1024];
        std::cout<<"Please Enter:"<<std::endl;

        getline(std::cin,input);
        //给服务器发送输入的数据：
        int ret=sendto(sockfd,input.c_str(),input.size(),0,(const struct sockaddr*)&serve,len);
        if(ret<0)
        {
            std::cout<<"sendto fail!"<<std::endl;
            exit(3);
        }
        //接受服务器返回的数据：
        int n=recvfrom(sockfd,buffer,sizeof(buffer)-1,0,(struct sockaddr*)&serve,&len);
        if(n>0)
        {
            buffer[n]='0';
            std::cout<<buffer<<std::endl;
        }
    }
    return 0;
}
